//package com.hitqz.robot.daemon.quartz.schedule;
//
//import cn.hutool.core.util.StrUtil;
//import com.google.common.collect.Maps;
//import com.google.common.util.concurrent.RateLimiter;
//import jakarta.annotation.PostConstruct;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//import org.springframework.web.client.RestTemplate;
//
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.OutputStream;
//import java.net.Socket;
//import java.util.Arrays;
//import java.util.List;
//import java.util.Map;
//import java.util.concurrent.TimeUnit;
//import java.util.concurrent.locks.Lock;
//import java.util.concurrent.locks.ReentrantLock;
//
//import static ch.qos.logback.core.encoder.ByteArrayUtil.hexStringToByteArray;
//
///**
// * SB想出来的要用按钮盒实现任务呼叫
// * 昆明北车辆段使用
// * @author xupkun
// * @date 2025/2/25
// */
//@Slf4j
//@Component
//public class PlcModuleSchedule {
//
//    @Value("${buttonBox.ip:''}")
//    private String buttonIp;
//    //
//    @Value("${buttonBox.buttonRed:''}")
//    private String buttonRed;
//
//    @Value("${buttonBox.buttonGreen:''}")
//    private String buttonGreen;
//    //
//    @Value("${buttonBox.buttonRedYellow:''}")
//    private String buttonRedYellow;
//    //
//
//    private final RateLimiter abortLimiter = RateLimiter.create(1);
//
//    private static Map<Integer, Long> maps = Maps.newHashMap();
//
//    private static Map<Integer, Integer> lastStatus = Maps.newHashMap();
//
//    private Lock lock = new ReentrantLock();
//
//    @PostConstruct
//    public void init() throws Exception {
//        //log.info("开机自动连接:" + buttonIp);
//        if (StrUtil.isNotEmpty(buttonIp)) {
//            Thread thread = new Thread(new PlcCheck());
//            thread.start();
//        }
//
//    }
//
//    class PlcCheck implements Runnable{
//        @Override
//        public void run() {
//            String serverHost = buttonIp;
//            int serverPort = 10000;
//            try (Socket socket = new Socket(serverHost, serverPort);
//                 OutputStream outputStream = socket.getOutputStream();
//                 InputStream inputStream = socket.getInputStream()) {
//                // 要发送的十六进制数据
//                byte[] dataToSend = hexStringToByteArray("FE02000000046DC6");
//                // 发送数据
//                while (true) {
//                    outputStream.write(dataToSend);
//                    outputStream.flush();
//                    // 读取服务器返回的数据
//                    byte[] buffer = new byte[1024];
//                    int bytesRead = inputStream.read(buffer);
//                    if (bytesRead > 0) {
//                        byte[] receivedData = new byte[bytesRead];
//                        System.arraycopy(buffer, 0, receivedData, 0, bytesRead);
//                        int status = receivedData[3];
//                        String result = String.format("%4s", Integer.toBinaryString(status)).replace(" ", "0")
//                                .replace("0", "-0-").replace("1", "-1-");
//                        String[] splitResult = result.split("-");
//                        List<String> finalList = Arrays.stream(splitResult).filter(StrUtil::isNotEmpty).toList();
//                        for (int i = 0; i < finalList.size();i++) {
//                            String current = finalList.get(i);
//                            if (StrUtil.isNotEmpty(current) && current.equals("1")) {
//                                synchronized (lock) {
//                                    long currentTime = System.currentTimeMillis();
//                                    if (maps.get(i) != null) {
//                                        long last = maps.get(i);
//                                        if (currentTime- last < 3*1000 ) {
//                                            continue;
//                                        }
//                                    };
//                                    String taskContent = "";
//                                    if (i == 0) {
//                                        taskContent = buttonRed;
//                                    } else if (i == 1) {
//                                        taskContent = buttonGreen;
//                                    } else if (i == 2) {
//                                        taskContent = buttonRedYellow;
//                                    }
//                                    String[] task = taskContent.split(",");
//                                    Integer ioLastStatus = lastStatus.get(i);
//                                    log.info("{} 呼叫一次 {}--- 解析任务类型为{} ", buttonIp, i, task[0]);
//                                    if (task[0].equals("cleanTask")) {
//                                    } else if (task[0].equals("task")) {
//                                        String src = task[1].trim();
//                                        String des = task[2].trim();
//                                        log.info("转运目标为: {}-{}", src, des);
//                                        sendRequest(src, des, task[3]);
//                                    }
//                                    maps.put(i, System.currentTimeMillis());
//                                }
//                            }
//                        }
//                    }
//                }
//            } catch (IOException e) {
//                e.printStackTrace();
//                log.info("重新链接:");
//                try {
//                    TimeUnit.SECONDS.sleep(5);
//                } catch (InterruptedException ex) {
//                    throw new RuntimeException(ex);
//                }
//                Thread thread = new Thread(new PlcCheck());
//                thread.start();
//            }
//        }
//    }
//
//
//    private void sendRequest(String src, String des, String groupId) {
//        RestTemplate restTemplate = new RestTemplate();
//        try {
//            String uri = "http://localhost:9999/admin/km/agv/call/dispatch?src=56001&des=56002&groupId=4331414"
//                    .replace("56001", src).replace("56002", des).replace("4331414", groupId);
//            String result = restTemplate.postForObject(uri, "", String.class);
//            log.info("呼叫一次{}---{}--结果--{}", src, des, result);
//        } catch (Exception e) {
//            log.info("呼叫错误:" + e.getMessage());
//        }
//    }
//
//
//
//
//}
